The present invention relates generally to the field of computer systems, and specifically to a method and structure of managing memory resources in a computing environment.
A computing environment can be comprised of a single computer unit, such as a PC, or a plurality of nodes in processing communication with one another. The nodes themselves may be comprised of one or more individual units, such as PCs or even monitors, or large computing networks that are electronically linked to one another locally or remotely. Independent of the size of the environment, processing tasks are performed through the use of messages. Messages can be used to perform functions for a single application running on a single unit, or for multiple applications running on multiple nodes. In a larger and more complex computing environment, messages are also used to establish communications between nodes or provide access to shared common resources.
A message is simply a string of data comprised of bits and bytes, representing different items. For example, a message can include names and addresses, images and documents that need to be transferred (sent or received) at a given processing time. Such data can include character strings, bit strings, binary integers, packed-decimal integers, floating-point numbers and the like. The data string may also include destination information or the return address of the requesting node or application, when applicable, depending on the message type. There are generally four types of messages: a “request” message, a “reply” message, a “one-way” message such as a command, and a “report” message that is used when something unexpected occurs.
At any one time, many messages may be in transit concurrently. Due to the extent of the messages and to prevent their loss, queues are established to hold unprocessed messages up until processing time. In more complex environments, a plurality of applications or nodes may even share one or more queues at any one time. Therefore, it is important that the type of message queuing implemented provides reliable storage and transfer of information independent of the underlying running application or even the device type. To address such issues and minimize compatibility concerns, sophisticated commercial message queuing packages, such as IBM's MQSeries, have been developed that offer a high-level application program interface (API) which shields programs from the complexities of different operating systems and underlying networks.
Regardless of the type of queuing provided, in most instances, a collection of different types of queues may be implemented to address the transfer needs of a particular environment. In such instances, a queue manager, stores the implemented message queues in a storage area set-aside in a dedicated memory location in the computing environment. This memory location, hereinafter referred to as the permanent memory or permanent memory location, is designed to hold transferred information (i.e. messages and queuing information) in transit until processing completion.
Unfortunately, the permanent memory has only a finite storage capacity. In critical peak periods, depending on the amount of messages requiring concurrent storage, the storage capacity may become exhausted. This is especially true in situations when executing applications utilize files that are growing at a rate faster than the data can be processed and removed.
When capacity is met or exceeded, further storage becomes impossible and a “queue full” condition is established. The inability to provide further storage when needed may cause loss of important information and impact further processing, at least until the condition is relieved.
In recent years, memory management techniques have been introduced to boost storage capacity by providing a temporary memory, such as a disk, at a different location in order to complement the capacity of permanent memory during critical peak periods. When the permanent memory reaches capacity or nears capacity, new or previously stored information is reallocated and stored in the temporary memory for later retrieval. The reallocated information will be later transferred back to the permanent memory once the storage capacity concerns of the permanent memory have been alleviated.
The challenge, however, with prior art methodologies that utilize reallocation techniques remain in the transferring of the reallocated information back to the permanent memory. In complex environments, it is of utmost importance to determine correctly how much data can be transferred back during each processing period without overwhelming or under-utilizing the permanent memory and the processing environment. Transferring too little information back at any one time from the temporary memory into the permanent memory, will require information to be retrieved frequently and transferred back, causing unintended processing delays. It is more efficient to transfer back larger quantities of information at any one time when possible, rather than to transfer the same amount over multiple transfers.
Similarly, too much data transfer at one time can cause an over-capacity condition leading to more reallocation of data from the permanent memory back to the temporary memory. The key, therefore, is to transfer back the largest amount of data without exceeding the storage capacity of the permanent memory.
One other consideration is to control the data transfer in such a way that doesn't impact one or more of the running applications. A sudden increase in data influx may easily overwhelm a running application, even in instances where the permanent storage capacity is not a consideration. The latter is especially important when queuing packages are utilized that offer a high-level application program interface (such as IBM's MQSeries).
Consequently, a new method and structure is needed that can determine an optimal rate of information retrieval and transfer back to the permanent memory after information is reallocated to a temporary memory due to storage capacity concerns.